/**
  * @file		pid_algorithm.h
  * @brief		pid控制算法头文件。
  * 	
  * @note		
  *	
  * @author 	FFerryman
  * @date		2025-7-20
  * @version 	1.0
  */
#ifndef __PID_ALGORITHM_H
#define __PID_ALGORITHM_H

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief PID控制参数结构体
 *
 * 该结构体用于存储PID控制相关的参数，包括比例、积分、微分系数，
 * 积分和输出限幅值，以及用于计算的中间变量。
 */
typedef struct {
    float p;                    ///< 比例系数
    float i;                    ///< 积分系数
    float d;                    ///< 微分系数
    float i_value;              ///< 积分项
    float i_value_pro;          ///< 积分系数
    float i_value_max;          ///< 积分项最大值（限幅）
    int16 out;                  ///< PID输出
    int16 out_max;              ///< PID输出最大值（限幅）
    float p_value_last;         ///< 上一次的比例项值
    float incremental_data[2];  ///< 增量式 PID 数据存储数组，用于保存前两次的增量数据
} pid_cycle_struct;
//位置式PID
void pid_control(pid_cycle_struct* pid_cycle, float target, float real);
//增量式PID
void pid_control_incremental(pid_cycle_struct* pid_cycle, float target, float real);

#ifdef __cplusplus
}
#endif

#endif
